home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / lib / mozilla-firefox / include / layout / nsIFrameSelection.h < prev    next >
C/C++ Source or Header  |  2006-05-08  |  21KB  |  470 lines

  1. /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
  2. /* ***** BEGIN LICENSE BLOCK *****
  3.  * Version: MPL 1.1/GPL 2.0/LGPL 2.1
  4.  *
  5.  * The contents of this file are subject to the Mozilla Public License Version
  6.  * 1.1 (the "License"); you may not use this file except in compliance with
  7.  * the License. You may obtain a copy of the License at
  8.  * http://www.mozilla.org/MPL/
  9.  *
  10.  * Software distributed under the License is distributed on an "AS IS" basis,
  11.  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
  12.  * for the specific language governing rights and limitations under the
  13.  * License.
  14.  *
  15.  * The Original Code is mozilla.org code.
  16.  *
  17.  * The Initial Developer of the Original Code is
  18.  * Netscape Communications Corporation.
  19.  * Portions created by the Initial Developer are Copyright (C) 1998
  20.  * the Initial Developer. All Rights Reserved.
  21.  *
  22.  * Contributor(s):
  23.  *
  24.  * Alternatively, the contents of this file may be used under the terms of
  25.  * either of the GNU General Public License Version 2 or later (the "GPL"),
  26.  * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
  27.  * in which case the provisions of the GPL or the LGPL are applicable instead
  28.  * of those above. If you wish to allow use of your version of this file only
  29.  * under the terms of either the GPL or the LGPL, and not to allow others to
  30.  * use your version of this file under the terms of the MPL, indicate your
  31.  * decision by deleting the provisions above and replace them with the notice
  32.  * and other provisions required by the GPL or the LGPL. If you do not delete
  33.  * the provisions above, a recipient may use your version of this file under
  34.  * the terms of any one of the MPL, the GPL or the LGPL.
  35.  *
  36.  * ***** END LICENSE BLOCK ***** */
  37.  
  38. /*
  39.  * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  40.  * NOTE!!  This is not a general class, but specific to layout and frames.
  41.  * Consumers looking for the general selection interface should look at
  42.  * nsISelection.
  43.  */
  44.  
  45. #ifndef nsIFrameSelection_h___
  46. #define nsIFrameSelection_h___
  47.  
  48. #include "nsISupports.h"
  49. #include "nsIFrame.h"
  50. #include "nsISelection.h"
  51. #include "nsIContent.h"
  52. #include "nsCOMPtr.h"
  53. #include "nsISelectionController.h"
  54.  
  55. class nsIPresShell;
  56.  
  57. // IID for the nsIFrameSelection interface
  58. #define NS_IFRAMESELECTION_IID      \
  59. { 0x18477ed4, 0x01ff, 0x4319, \
  60.   { 0x95, 0xc0, 0x63, 0x9e, 0xe4, 0x33, 0xbe, 0x92 } }
  61.  
  62.  
  63. //----------------------------------------------------------------------
  64.  
  65. // Selection interface
  66.  
  67. struct SelectionDetails
  68. {
  69.   PRInt32 mStart;
  70.   PRInt32 mEnd;
  71.   SelectionType mType;
  72.   SelectionDetails *mNext;
  73. };
  74.  
  75. /*PeekOffsetStruct
  76.    *  @param mShell is used to get the PresContext usefull for measuring text ect.
  77.    *  @param mDesiredX is the "desired" location of the new caret
  78.    *  @param mAmount eWord, eCharacter, eLine
  79.    *  @param mDirection enum defined in this file to be eForward or eBackward
  80.    *  @param mStartOffset start offset to start the peek. 0 == beginning -1 = end
  81.    *  @param mResultContent content that actually is the next/previous
  82.    *  @param mResultOffset offset for result content
  83.    *  @param mResultFrame resulting frame for peeking
  84.    *  @param mEatingWS boolean to tell us the state of our search for Next/Prev
  85.    *  @param mPreferLeft true = prev line end, false = next line begin
  86.    *  @param mJumpLines if this is true then its ok to cross lines while peeking
  87.    *  @param mScrollViewStop if this is true then stop peeking across scroll view boundary
  88. */
  89. struct nsPeekOffsetStruct
  90. {
  91.   void SetData(nsIPresShell *aShell,
  92.                nscoord aDesiredX, 
  93.                nsSelectionAmount aAmount,
  94.                nsDirection aDirection,
  95.                PRInt32 aStartOffset, 
  96.                PRBool aEatingWS,
  97.                PRBool aPreferLeft,
  98.                PRBool aJumpLines,
  99.                PRBool aScrollViewStop,
  100.                PRBool aIsKeyboardSelect)
  101.       {
  102.        mShell=aShell;
  103.        mDesiredX=aDesiredX;
  104.        mAmount=aAmount;
  105.        mDirection=aDirection;
  106.        mStartOffset=aStartOffset;
  107.        mEatingWS=aEatingWS;
  108.        mPreferLeft=aPreferLeft;
  109.        mJumpLines = aJumpLines;
  110.        mScrollViewStop = aScrollViewStop;
  111.        mIsKeyboardSelect = aIsKeyboardSelect;
  112.       }
  113.   nsIPresShell *mShell;
  114.   nscoord mDesiredX;
  115.   nsSelectionAmount mAmount;
  116.   nsDirection mDirection;
  117.   PRInt32 mStartOffset;
  118.   nsCOMPtr<nsIContent> mResultContent;
  119.   PRInt32 mContentOffset;
  120.   PRInt32 mContentOffsetEnd;
  121.   nsIFrame *mResultFrame;
  122.   PRBool mEatingWS;
  123.   PRBool mPreferLeft;
  124.   PRBool mJumpLines;
  125.   PRBool mScrollViewStop;
  126.   PRBool mIsKeyboardSelect;
  127. };
  128.  
  129. class nsIScrollableView;
  130.  
  131.  
  132. class nsIFrameSelection : public nsISupports {
  133. public:
  134.   NS_DEFINE_STATIC_IID_ACCESSOR(NS_IFRAMESELECTION_IID)
  135.   enum HINT { HINTLEFT = 0, HINTRIGHT = 1};  //end of this line or beginning of next
  136.  
  137.   /** Init will initialize the frame selector with the necessary pres shell to 
  138.    *  be used by most of the methods
  139.    *  @param aShell is the parameter to be used for most of the other calls for callbacks ect
  140.    *  @param aLimiter limits the selection to nodes with aLimiter parents
  141.    */
  142.   NS_IMETHOD Init(nsIPresShell *aShell, nsIContent *aLimiter) = 0; //default since this isnt used for embedding
  143.  
  144.   /* SetScrollableView sets the scroll view
  145.    *  @param aScrollView is the scroll view for this selection.
  146.    */
  147.   NS_IMETHOD SetScrollableView(nsIScrollableView *aScrollView) =0;
  148.  
  149.   /* GetScrollableView gets the current scroll view
  150.    *  @param aScrollView is the scroll view for this selection.
  151.    */
  152.   NS_IMETHOD GetScrollableView(nsIScrollableView **aScrollView) =0;
  153.  
  154.   /** ShutDown will be called when the owner of the frame selection is shutting down
  155.    *  this should be the time to release all member variable interfaces. all methods
  156.    *  called after ShutDown should return NS_ERROR_FAILURE
  157.    */
  158.   NS_IMETHOD ShutDown() = 0;
  159.  
  160.   /** HandleKeyEvent will accept an event.
  161.    *  <P>DOES NOT ADDREF<P>
  162.    *  @param aGuiEvent is the event that should be dealt with by aFocusFrame
  163.    *  @param aFrame is the frame that MAY handle the event
  164.    */
  165.   NS_IMETHOD HandleTextEvent(nsGUIEvent *aGuiEvent) = 0;
  166.  
  167.   /** HandleKeyEvent will accept an event and a PresContext.
  168.    *  <P>DOES NOT ADDREF<P>
  169.    *  @param aGuiEvent is the event that should be dealt with by aFocusFrame
  170.    *  @param aFrame is the frame that MAY handle the event
  171.    */
  172.   NS_IMETHOD HandleKeyEvent(nsPresContext* aPresContext, nsGUIEvent *aGuiEvent) = 0;
  173.  
  174.   /** HandleClick will take the focus to the new frame at the new offset and 
  175.    *  will either extend the selection from the old anchor, or replace the old anchor.
  176.    *  the old anchor and focus position may also be used to deselect things
  177.    *  @param aNewfocus is the content that wants the focus
  178.    *  @param aContentOffset is the content offset of the parent aNewFocus
  179.    *  @param aContentOffsetEnd is the content offset of the parent aNewFocus and is specified different
  180.    *                           when you need to select to and include both start and end points
  181.    *  @param aContinueSelection is the flag that tells the selection to keep the old anchor point or not.
  182.    *  @param aMultipleSelection will tell the frame selector to replace /or not the old selection. 
  183.    *         cannot coexist with aContinueSelection
  184.    *  @param aHint will tell the selection which direction geometrically to actually show the caret on. 
  185.    *         1 = end of this line 0 = beggining of this line
  186.    */
  187.   NS_IMETHOD HandleClick(nsIContent *aNewFocus, PRUint32 aContentOffset, PRUint32 aContentEndOffset , 
  188.                        PRBool aContinueSelection, PRBool aMultipleSelection, PRBool aHint) = 0; 
  189.  
  190.   /** HandleDrag extends the selection to contain the frame closest to aPoint.
  191.    *  @param aPresContext is the context to use when figuring out what frame contains the point.
  192.    *  @param aFrame is the parent of all frames to use when searching for the closest frame to the point.
  193.    *  @param aPoint is relative to aFrame's parent view.
  194.    */
  195.   NS_IMETHOD HandleDrag(nsPresContext *aPresContext, nsIFrame *aFrame, nsPoint& aPoint) = 0;
  196.  
  197.   /** HandleTableSelection will set selection to a table, cell, etc
  198.    *   depending on information contained in aFlags
  199.    *  @param aParentContent is the paretent of either a table or cell that user clicked or dragged the mouse in
  200.    *  @param aContentOffset is the offset of the table or cell
  201.    *  @param aTarget indicates what to select (defined in nsISelectionPrivate.idl/nsISelectionPrivate.h):
  202.    *    TABLESELECTION_CELL      We should select a cell (content points to the cell)
  203.    *    TABLESELECTION_ROW       We should select a row (content points to any cell in row)
  204.    *    TABLESELECTION_COLUMN    We should select a row (content points to any cell in column)
  205.    *    TABLESELECTION_TABLE     We should select a table (content points to the table)
  206.    *    TABLESELECTION_ALLCELLS  We should select all cells (content points to any cell in table)
  207.    *  @param aMouseEvent         passed in so we we can get where event occured and what keys are pressed
  208.    */
  209.   NS_IMETHOD HandleTableSelection(nsIContent *aParentContent, PRInt32 aContentOffset, PRInt32 aTarget, nsMouseEvent *aMouseEvent) = 0;
  210.  
  211.   /** StartAutoScrollTimer is responsible for scrolling views so that aPoint is always
  212.    *  visible, and for selecting any frame that contains aPoint. The timer will also reset
  213.    *  itself to fire again if we have not scrolled to the end of the document.
  214.    *  @param aPresContext is the context to use when figuring out what frame contains the point.
  215.    *  @param aView is view to use when searching for the closest frame to the point,
  216.    *  which is the view that is capturing the mouse
  217.    *  @param aPoint is relative to the view.
  218.    *  @param aDelay is the timer's interval.
  219.    */
  220.   NS_IMETHOD StartAutoScrollTimer(nsPresContext *aPresContext, nsIView* aFrame, nsPoint& aPoint, PRUint32 aDelay) = 0;
  221.  
  222.   /** StopAutoScrollTimer stops any active auto scroll timer.
  223.    */
  224.   NS_IMETHOD StopAutoScrollTimer() = 0;
  225.  
  226.   /** EnableFrameNotification
  227.    *  mutch like start batching, except all dirty calls are ignored. no notifications will go 
  228.    *  out until enableNotifications with a PR_TRUE is called
  229.    */
  230.   NS_IMETHOD EnableFrameNotification(PRBool aEnable) = 0;
  231.  
  232.   /** Lookup Selection
  233.    *  returns in frame coordinates the selection beginning and ending with the type of selection given
  234.    * @param aContent is the content asking
  235.    * @param aContentOffset is the starting content boundary
  236.    * @param aContentLength is the length of the content piece asking
  237.    * @param aReturnDetails linkedlist of return values for the selection. 
  238.    * @param aSlowCheck will check using slow method with no shortcuts
  239.    */
  240.   NS_IMETHOD LookUpSelection(nsIContent *aContent, PRInt32 aContentOffset, PRInt32 aContentLength,
  241.                              SelectionDetails **aReturnDetails, PRBool aSlowCheck) = 0;
  242.  
  243.   /** SetMouseDownState(PRBool);
  244.    *  sets the mouse state to aState for resons of drag state.
  245.    * @param aState is the new state of mousedown
  246.    */
  247.   NS_IMETHOD SetMouseDownState(PRBool aState)=0;
  248.  
  249.   /** GetMouseDownState(PRBool *);
  250.    *  gets the mouse state to aState for resons of drag state.
  251.    * @param aState will hold the state of mousedown
  252.    */
  253.   NS_IMETHOD GetMouseDownState(PRBool *aState)=0;
  254.  
  255.   /**
  256.     if we are in table cell selection mode. aka ctrl click in table cell
  257.    */
  258.   NS_IMETHOD GetTableCellSelection(PRBool *aState)=0;
  259.  
  260.   /** GetSelection
  261.    * no query interface for selection. must use this method now.
  262.    * @param aSelectionType enum value defined in nsISelection for the seleciton you want.
  263.    */
  264.   NS_IMETHOD GetSelection(SelectionType aSelectionType, nsISelection **aSelection)=0;
  265.  
  266.   /**
  267.    * ScrollSelectionIntoView scrolls a region of the selection,
  268.    * so that it is visible in the scrolled view.
  269.    *
  270.    * @param aType the selection to scroll into view.
  271.    * @param aRegion the region inside the selection to scroll into view.
  272.    * @param aIsSynchronous when PR_TRUE, scrolls the selection into view
  273.    * at some point after the method returns.request which is processed
  274.    */
  275.   NS_IMETHOD ScrollSelectionIntoView(SelectionType aSelectionType, SelectionRegion aRegion, PRBool aIsSynchronous)=0;
  276.  
  277.   /** RepaintSelection repaints the selected frames that are inside the selection
  278.    *  specified by aSelectionType.
  279.    * @param aSelectionType enum value defined in nsISelection for the seleciton you want.
  280.    */
  281.   NS_IMETHOD RepaintSelection(nsPresContext* aPresContext, SelectionType aSelectionType)=0;
  282.  
  283.   /** GetFrameForNodeOffset given a node and its child offset, return the nsIFrame and
  284.    *  the offset into that frame. 
  285.    * @param aNode input parameter for the node to look at
  286.    * @param aOffset offset into above node.
  287.    * @param aReturnFrame will contain the return frame. MUST NOT BE NULL or will return error
  288.    * @param aReturnOffset will contain offset into frame.
  289.    */
  290.   NS_IMETHOD GetFrameForNodeOffset(nsIContent *aNode, PRInt32 aOffset, HINT aHint, nsIFrame **aReturnFrame, PRInt32 *aReturnOffset)=0;
  291.  
  292.   /** AdjustOffsetsFromStyle. Called after detecting that a click or drag will
  293.    *  select the frame, this function looks for user-select style on that frame or a parent
  294.    *  frame, and adjust the content and offsets accordingly.
  295.    * @param aFrame the frame that was clicked
  296.    * @param outContent content node to be selected
  297.    * @param outStartOffset selection start offset
  298.    * @param outEndOffset selection end offset
  299.    */
  300.   NS_IMETHOD AdjustOffsetsFromStyle(nsIFrame *aFrame, PRBool *changeSelection,
  301.         nsIContent** outContent, PRInt32* outStartOffset, PRInt32* outEndOffset)=0;
  302.   
  303.   
  304.   NS_IMETHOD GetHint(HINT *aHint)=0;
  305.   NS_IMETHOD SetHint(HINT aHint)=0;
  306.  
  307.   /** CharacterMove will generally be called from the nsiselectioncontroller implementations.
  308.    *  the effect being the selection will move one character left or right.
  309.    * @param aForward move forward in document.
  310.    * @param aExtend continue selection
  311.    */
  312.   NS_IMETHOD CharacterMove(PRBool aForward, PRBool aExtend)=0;
  313.  
  314.   /** WordMove will generally be called from the nsiselectioncontroller implementations.
  315.    *  the effect being the selection will move one word left or right.
  316.    * @param aForward move forward in document.
  317.    * @param aExtend continue selection
  318.    */
  319.   NS_IMETHOD WordMove(PRBool aForward, PRBool aExtend)=0;
  320.  
  321.   /** LineMove will generally be called from the nsiselectioncontroller implementations.
  322.    *  the effect being the selection will move one line up or down.
  323.    * @param aForward move forward in document.
  324.    * @param aExtend continue selection
  325.    */
  326.   NS_IMETHOD LineMove(PRBool aForward, PRBool aExtend)=0;
  327.  
  328.   /** IntraLineMove will generally be called from the nsiselectioncontroller implementations.
  329.    *  the effect being the selection will move to beginning or end of line
  330.    * @param aForward move forward in document.
  331.    * @param aExtend continue selection
  332.    */
  333.   NS_IMETHOD IntraLineMove(PRBool aForward, PRBool aExtend)=0;
  334.  
  335.   /**
  336.    * Scrolling then moving caret placement code in common to text areas and 
  337.    * content areas should be located in the implementer
  338.    * This method will accept the following parameters and perform the scroll 
  339.    * and caret movement.  It remains for the caller to call the final 
  340.    * ScrollCaretIntoView if that called wants to be sure the caret is always
  341.    * visible.
  342.    *
  343.    * @param aForward if PR_TRUE, scroll forward if not scroll backward
  344.    *
  345.    * @param aExtend  if PR_TRUE, extend selection to the new point
  346.    *
  347.    * @param aScrollableView the view that needs the scrolling
  348.    *
  349.    * @param aFrameSel the nsIFrameSelection of the caller.
  350.    *
  351.    * @return  always NS_OK
  352.    */
  353.   NS_IMETHOD CommonPageMove(PRBool aForward, 
  354.                             PRBool aExtend, 
  355.                             nsIScrollableView *aScrollableView, 
  356.                             nsIFrameSelection *aFrameSel)=0;
  357.  
  358.   /** Select All will generally be called from the nsiselectioncontroller implementations.
  359.    *  it will select the whole doc
  360.    */
  361.   NS_IMETHOD SelectAll()=0;
  362.  
  363.   /** Sets/Gets The display selection enum.
  364.    */
  365.   NS_IMETHOD SetDisplaySelection(PRInt16 aState)=0;
  366.   NS_IMETHOD GetDisplaySelection(PRInt16 *aState)=0;
  367.  
  368.   /** Allow applications to specify how we should place the caret
  369.    *  when the user clicks over an existing selection. A aDelay
  370.    *  value of PR_TRUE means delay clearing the selection and
  371.    *  placing the caret until MouseUp, when the user clicks over
  372.    *  an existing selection. This is especially usefull when applications
  373.    *  want to support Drag & Drop of the current selection. A value
  374.    *  of PR_FALSE means place the caret immediately. If the application
  375.    *  never calls this method, the nsIFrameSelection implementation
  376.    *  assumes the default value is PR_TRUE.
  377.    * @param aDelay PR_TRUE if we should delay caret placement.
  378.    */
  379.   NS_IMETHOD SetDelayCaretOverExistingSelection(PRBool aDelay)=0;
  380.  
  381.   /** Get the current delay caret setting. If aDelay contains
  382.    *  a return value of PR_TRUE, the caret is placed on MouseUp
  383.    *  when clicking over an existing selection. If PR_FALSE,
  384.    *  the selection is cleared and caret is placed immediately
  385.    *  in all cases.
  386.    * @param aDelay will contain the return value.
  387.    */
  388.   NS_IMETHOD GetDelayCaretOverExistingSelection(PRBool *aDelay)=0;
  389.  
  390.   /** If we are delaying caret placement til MouseUp (see
  391.    *  Set/GetDelayCaretOverExistingSelection()), this method
  392.    *  can be used to store the data received during the MouseDown
  393.    *  so that we can place the caret during the MouseUp event.
  394.    * @aMouseEvent the event received by the selection MouseDown
  395.    *  handling method. A NULL value can be use to tell this method
  396.    *  that any data is storing is no longer valid.
  397.    */
  398.   NS_IMETHOD SetDelayedCaretData(nsMouseEvent *aMouseEvent)=0;
  399.  
  400.   /** Get the delayed MouseDown event data necessary to place the
  401.    *  caret during MouseUp processing.
  402.    * @aMouseEvent will contain a pointer to the event received
  403.    *  by the selection during MouseDown processing. It can be NULL
  404.    *  if the data is no longer valid.
  405.    */
  406.   NS_IMETHOD GetDelayedCaretData(nsMouseEvent **aMouseEvent)=0;
  407.  
  408.  
  409.   /** Get the content node that limits the selection
  410.    *  When searching up a nodes for parents, as in a text edit field
  411.    *    in an browser page, we must stop at this node else we reach into the 
  412.    *    parent page, which is very bad!
  413.    */
  414.   NS_IMETHOD GetLimiter(nsIContent **aLimiterContent)=0;
  415.  
  416.   /** This will tell the frame selection that a double click has been pressed 
  417.    *  so it can track abort future drags if inside the same selection
  418.    *  @aDoubleDown has the double click down happened
  419.    */
  420.   NS_IMETHOD SetMouseDoubleDown(PRBool aDoubleDown)=0;
  421.  
  422.   /** This will return whether the double down flag was set.
  423.    *  @aDoubleDown is the return boolean value
  424.    */
  425.   NS_IMETHOD GetMouseDoubleDown(PRBool *aDoubleDown)=0;
  426.  
  427.   /**
  428.    * MaintainSelection will track the current selection as being "sticky".
  429.    * Dragging or extending selection will never allow for a subset
  430.    * (or the whole) of the maintained selection to become unselected.
  431.    * Primary use: double click selecting then dragging on second click
  432.    */
  433.   NS_IMETHOD MaintainSelection()=0;
  434.  
  435. #ifdef IBMBIDI
  436.   /** GetPrevNextBidiLevels will return the frames and associated Bidi levels of the characters
  437.    *   logically before and after a (collapsed) selection.
  438.    *  @param aPresContext is the context to use
  439.    *  @param aNode is the node containing the selection
  440.    *  @param aContentOffset is the offset of the selection in the node
  441.    *  @param aPrevFrame will hold the frame of the character before the selection
  442.    *  @param aNextFrame will hold the frame of the character after the selection
  443.    *  @param aPrevLevel will hold the Bidi level of the character before the selection
  444.    *  @param aNextLevel will hold the Bidi level of the character after the selection
  445.    *
  446.    *  At the beginning and end of each line there is assumed to be a frame with Bidi level equal to the
  447.    *   paragraph embedding level. In these cases aPrevFrame and aNextFrame respectively will return nsnull.
  448.    */
  449.   NS_IMETHOD GetPrevNextBidiLevels(nsPresContext *aPresContext, nsIContent *aNode, PRUint32 aContentOffset,
  450.                                    nsIFrame **aPrevFrame, nsIFrame **aNextFrame, PRUint8 *aPrevLevel, PRUint8 *aNextLevel)=0;
  451.  
  452.   /** GetFrameFromLevel will scan in a given direction
  453.    *   until it finds a frame with a Bidi level less than or equal to a given level.
  454.    *   It will return the last frame before this.
  455.    *  @param aPresContext is the context to use
  456.    *  @param aFrameIn is the frame to start from
  457.    *  @param aDirection is the direction to scan
  458.    *  @param aBidiLevel is the level to search for
  459.    *  @param aFrameOut will hold the frame returned
  460.    */
  461.   NS_IMETHOD GetFrameFromLevel(nsPresContext *aPresContext, nsIFrame *aFrameIn, nsDirection aDirection, PRUint8 aBidiLevel,
  462.                                nsIFrame **aFrameOut)=0;
  463.  
  464. #endif // IBMBIDI
  465. };
  466.  
  467.  
  468.  
  469. #endif /* nsIFrameSelection_h___ */
  470.